package com.mark.anto.bootstrap;

import com.mark.anto.annotation.EnableHelloWorldByAnnotation;
import com.mark.anto.configuration.HelloWorldConfiguration;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.util.Assert;

/**
 * @Description: 注解方式实现 Enable
 * @Author: Mark
 * @CreateDate: 2019/9/1 0:28
 * @Version: 3.00.001
 * @Copyright : 豆浆油条个人非正式工作室
 *
 * Spring Framework 3.1 开始支持”@Enable 模块驱动
 * 定义：具备相同领域的功能组件集合，组合所形成一个独立的单元
 * 举例：@EnableWebMvc @EnableAutoConfiguration
 * 实现：一：{@link EnableHelloWorldBootstrapByAnnotation} 注解方式；直接暴力
 *       二：{@link EnableHelloWorldByCodeBootstrap}编程方式；更加弹性灵活
 *
 *
 * 注解方式注入Bean的过程： {@link HelloWorldConfiguration} ->{@code helloWorld()}
 * @see EnableHelloWorldByAnnotation
 * @see HelloWorldConfiguration
 *
 */
@EnableHelloWorldByAnnotation
public class EnableHelloWorldBootstrapByAnnotation {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(EnableHelloWorldBootstrapByAnnotation.class)
                .web(WebApplicationType.NONE)
                .run(args);

        //从上下文中获取Bean
        String bean = context.getBean("helloWorld", String.class);
        Assert.notNull(bean, "获取到Bean为为空！");

        //关闭上下文
        context.close();
    }
}
